<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
      for(var i=0;i<5;i++){
    setTimeout(function () {  
        console.log(i);///5
    },i*1000)
      }

//       显示的代码示例不会显示值0,1,2,3和4，这可能是预期的;而是显示5,5,5,5。

// 这是因为循环内执行的每个函数将在整个循环完成后执行，因此所有函数都会引用存储在i中的最后-一个值，即5。

// 通过为每次迭代创建一个唯- -的作用域，可以使用闭包来防止这个问题，并将该变量的每个唯一-值存储在其作用域中， 如下所示:

// for (vari=0;i<5;i++){

// (function(x){

// setTimeout(function() { console.log(x); }, x* 1000 );

// })();

// 这会产生将0,1,2,3和4记录到控制台的可能结果。

// 在ES2015上下文中，您可以在原始代码中简单地使用let而不是var:for(leti=0;i<5;i++){

// setTimeout(function() { console.log(); },i* 1000 );

// }
    </script>
</body>
</html>